import { Toast } from 'antd-mobile'
import CryptoJS from 'crypto-js'
import { config } from './'

function s4() {
  return Math.floor((1 + Math.random()) * 0x10000)
    .toString(16)
    .substring(1)
}

export default {
  guid() {
    return s4() + s4() + '-' + s4() + '-' + s4() +
      '-' + s4() + '-' + s4() + s4()
  },
  // 通用接口`promise`错误处理
  onPromiseError(err) {
    console.error(`Got error`, err)
  },
  // 依赖`localStorage`
  accessEntry() {
    return {
      sid: localStorage.token,
    }
  },
  loadingToast(message = '正在提交...', duration = 10) {
    Toast.loading(message, duration, () => {
      Toast.fail('提交失败！');
    })
  },
  // aes 加密密码
  aesEncrypt(cipher) {
    var key = CryptoJS.enc.Utf8.parse(config.aesKey)
    var srcs = CryptoJS.enc.Utf8.parse(cipher)
    var encrypted = CryptoJS.AES.encrypt(
      srcs, key,
      { iv: config.aesIv, mode: CryptoJS.mode.CBC }
    )
    return encrypted.toString()
  },
  accAdd(arg1, arg2) {
    var r1, r2, m
    try {
      r1 = arg1.toString().split('.')[1].length
    } catch (e) {
      r1 = 0
    }
    try {
      r2 = arg2.toString().split('.')[1].length
    } catch (e) {
      r2 = 0
    }
    m = Math.pow(10, Math.max(r1, r2))
    return (arg1 * m + arg2 * m) / m
  },
  accSub(arg1, arg2) {
    var r1, r2, m, n
    try {
      r1 = arg1.toString().split('.')[1].length
    } catch (e) {
      r1 = 0
    }
    try {
      r2 = arg2.toString().split('.')[1].length
    } catch (e) {
      r2 = 0
    }
    m = Math.pow(10, Math.max(r1, r2))
    n = (r1 >= r2) ? r1 : r2
    const res = ((arg1 * m - arg2 * m) / m).toFixed(n)
    return Number(res)
  },
  accMul(arg1,arg2) {
    var m = 0,
      s1 = arg1.toString(),
      s2 = arg2.toString()
    try {
      m += s1.split('.')[1].length
    } catch (e) {}
    try {
      m += s2.split('.')[1].length
    } catch (e) {}
    return Number(s1.replace('.', '')) * Number(s2.replace('.', '')) / Math.pow(10, m)
  },
  accDiv(arg1, arg2) {
    var t1 = 0,
        t2 = 0,
        r1,
        r2
    try {
      t1 = arg1.toString().split('.')[1].length
    } catch (e) {}
    try {
      t2 = arg2.toString().split('.')[1].length
    } catch (e) {}
    r1 = Number(arg1.toString().replace('.', ''))
    r2 = Number(arg2.toString().replace('.', ''))
    return this.accMul((r1 / r2), Math.pow(10, t2 - t1))
  },
}